package com.hispeed.management.service;

import java.io.IOException;

/**
 * Redis Service接口
 *
 * @author zhangzb
 * @create 2017-06-19 13:37
 **/
public interface IRedisService {

    /**
     * 设置给定key的值，若key已经存在，set复写旧值
     * @param key
     * @param value
     * @return
     */
    public boolean set(String key, String value);

    /**
     * 设置给定key的值和有效时间，若key已经存在，复写旧值，并重新计算有效时间
     * @param key
     * @param value
     * @param expire
     * @return
     */
    public boolean set(String key, String value, long expire);

    /**
     * 获取key的value
     * @param key
     * @return
     */
    public String get(String key);

    /**
     * 设置给定key的过期时间（单位为秒）
     * @param key
     * @param expire
     * @return
     */
    public boolean expire(String key, long expire);

    /**
     * 判断给定的key是否存在
     * @param key
     * @return
     */
    public boolean exist(final String key);

    /**
     * 存放object类型，若key已经存在，set复写旧值
     * @param key
     * @param object
     */
    public void setObject(String key, Object object) throws IOException;

    /**
     * 存放object类型，若key已经存在，复写旧值，并重新计算有效时间
     * @param key 键
     * @param object object类型
     * @param expire 超时时间
     */
    public void setObject(String key, Object object, long expire) throws IOException;

    /**
     * 在key 对应 list的头部添加字符串元素
     * @param key
     * @param obj
     * @return
     * @throws IOException
     */
    public long lpush(String key, Object obj) throws IOException;

    /**
     * 在key 对应 list 的尾部添加字符串元素
     * @param key
     * @param obj
     * @return
     * @throws IOException
     */
    public long rpush(String key, Object obj) throws IOException;

    /**
     * 从 list 的头部删除元素，并返回删除元素
     * @param key
     * @return
     */
    public String lpop(String key);

    /**
     * 从 list 的尾部删除元素，并返回删除元素
     * @param key
     * @return
     */
    public String rpop(String key);

}
